1. Technical Field
The present invention related generally to an improved data processing system and in particular to a method and apparatus for processing data. Still more particularly, the present invention provides a method, apparatus, and computer instructions for loading code during an initial program load.
2. Description of Related Art
When a computer is started or booted, an initial program load occurs. This initial program load process is also referred to as a boot process in which instructions located on a read-only memory or a flash memory are automatically executed upon start-up or boot of the computer. A flash memory is a more common storage device for storing these instructions, which is also referred to as initial program load firmware. A flash memory is a device that retains instructions when no power is applied to the device. Further, flash memory devices may be modified through a program or software component also referred to as a flash update program. This initial program load firmware may be stored in one or more flash devices. This firmware searches for the operating system, loads the operating system, and then passes control to the operating system.
Many of the computer systems today are designed with redundant initial program load firmware, also referred to as “microcode”, used to initialize hardware before the operated system can be operated and executed. This initial program load firmware may contain one or more functional microcode images. These microcode images may be referred to as “load identifiers” (LIDS). In addition to loading the operating system, a LID also may perform diagnostic processes on the hardware. As more complex computer systems are developed, additional functions are required in the initial program load firmware. In such a case, this firmware may contain multiple LIDS.
With increasing number of LIDS, the possibility of one or more LIDS having a problem or defect increases. These problems may prevent the computer system from operating properly. One solution to defective LIDS is the use of redundant images. If, during the boot process, a defective LID is encountered, then a redundant image may be used to reboot the system at that time. Further, if a particular LID is defective and does not prevent the computer system from operating, a new LID may replace the old LID through a flash update. This LID may be updated through the operating system on which the LID is currently located. Updates also may not occur properly during a flash update process. For example, a problem may occur in which corruption of a LID occurs in response to events, such as data transfer, a power glitch, or a power loss. These events may cause a portion of the code in a LID to go bad or contain an error.
One problem with these present designs is that a computer will boot or start from a portion of the initial program load firmware in a flash memory device. If a LID or microcode image is defective, the computer system will continue to boot or execute instructions until the defective code is reached. If this defective code is loaded early in the boot process, the user will be alerted to this problem quickly. If the defective code is located in a LID loaded near the end of the boot process, the user will waste valuable time waiting for the computer system to reboot. Such a problem can be frustrating and takes time that a user does not want to spend.
Therefore, it would be advantageous to have an improved method, apparatus, and computer instructions for determining whether a microcode image used in a boot or start-up process for a data processing system is valid.